package org.nowcoder.leetcode.arrays;

import java.util.HashMap;
import java.util.Map;

/**
 * Title  : 13. Roman to Integer
 * Source : https://leetcode.cn/problems/roman-to-integer/?envType=study-plan-v2&envId=top-interview-150
 * Author : XrazYang
 * Date   : 2023-08-07
 */
public class LeetCode_13 {
    private static final Map<Character, Integer> symbolValues = new HashMap<>();

    static {
        symbolValues.put('I', 1);
        symbolValues.put('V', 5);
        symbolValues.put('X', 10);
        symbolValues.put('L', 50);
        symbolValues.put('C', 100);
        symbolValues.put('D', 500);
        symbolValues.put('M', 1000);
    }

    public int romanToInt(String s) {
        //     int result = 0;
        //     Map<String, Integer> map = new HashMap<>();
        //     map.put("I", 1);
        //     map.put("V", 5);
        //     map.put("X", 10);
        //     map.put("L", 50);
        //     map.put("C", 100);
        //     map.put("D", 500);
        //     map.put("M", 1000);
        //     map.put("IV", 4);
        //     map.put("IX", 9);
        //     map.put("XL", 40);
        //     map.put("XC", 90);
        //     map.put("CD", 400);
        //     map.put("CM", 900);
        //     for (int i = 0; i < s.length(); i++) {
        //          while (i + 1 < s.length()) {
        //             String sub = s.substring(i, i + 2);
        //             Integer k = map.get(sub);
        //             if (k != null) {
        //                 result += k;
        //                 i += 2;
        //             } else {
        //                 break;
        //             }
        //         }
        //         if (i < s.length()) {
        //             result += map.get(String.valueOf(s.charAt(i)));
        //         }
        //     }
        //     return result;
        // }

        //模拟法： 代码更为简洁
        int result = 0;
        for (int i = 0; i < s.length(); i++) {
            int ans = symbolValues.get(s.charAt(i));
            if (i + 1 < s.length() && ans < symbolValues.get(s.charAt(i + 1))) {
                result -= ans;
            } else {
                result += ans;
            }
        }
        return result;
    }
}
